package com.zzw.springboot.bean;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import java.util.Date;
import java.util.List;

/**
 * 角色实体类
 */
@ApiModel("角色实体类")
@TableName("sys_role")
@Data
public class SysRole {
    
    /**
     * 角色ID
     */
    @ApiModelProperty("角色ID")
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;
    
    /**
     * 角色编码
     */
    @ApiModelProperty("角色编码")
    @NotEmpty(message = "角色编码不能为空")
    private String roleCode;
    
    /**
     * 角色名称
     */
    @ApiModelProperty("角色名称")
    @NotEmpty(message = "角色名称不能为空")
    private String roleName;
    
    /**
     * 角色描述
     */
    @ApiModelProperty("角色描述")
    private String description;
    
    /**
     * 数据范围（1：全部数据权限 2：自定义数据权限 3：本部门数据权限 4：本部门及以下数据权限 5：仅本人数据权限）
     */
    @ApiModelProperty("数据范围")
    private String dataScope;
    
    /**
     * 状态:1启用, 0禁用
     */
    @ApiModelProperty("状态:1启用, 0禁用")
    @NotNull(message = "角色状态不能为空")
    private Integer status;
    
    /**
     * 排序
     */
    @ApiModelProperty("排序")
    private Integer sort;
    
    /**
     * 是否删除:0否,1是
     */
    @ApiModelProperty("是否删除:0否,1是")
    @TableField("is_deleted")
    //启用逻辑删除功能（非物理删除）
    //value = "0"：表示未删除状态的默认值
    //delval = "1"：表示执行"删除"操作后更新的值
    //当调用deleteById()等方法时，MyBatis-Plus会自动生成类似SQL：
    //UPDATE sys_role SET is_deleted = 1 WHERE id = #{id}
    @TableLogic(value = "0", delval = "1")
    private Integer isDeleted;
    
    /**
     * 创建人
     */
    @ApiModelProperty("创建人")
    private String createBy;
    
    /**
     * 创建时间
     */
    @ApiModelProperty("创建时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date createTime;
    
    /**
     * 更新人
     */
    @ApiModelProperty("更新人")
    private String updateBy;
    
    /**
     * 更新时间
     */
    @ApiModelProperty("更新时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date updateTime;
    
    /**
     * 备注
     */
    @ApiModelProperty("备注")
    private String remark;
    
    /**
     * 部门ID列表，用于数据权限
     */
    @TableField(exist = false)
    private List<Integer> deptIds;
    
    /**
     * 菜单ID列表，用于角色权限
     */
    @TableField(exist = false)
    private List<Integer> menuIds;
} 